package com.exartisan.yn_event;

import java.util.ArrayList;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

import com.exartisan.adapter.ImagePagerAdapter;
import com.exartisan.bean.GalleryContent;
import com.exartisan.util.FbUtil;
import com.exartisan.yn_event.util.SystemUiHider;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.Session.StatusCallback;

/**
 * An example full-screen activity that shows and hides the system UI (i.e.
 * status bar and navigation/system bar) with user interaction.
 * 
 * @see SystemUiHider
 */
public class PhotoActivity extends Activity {
	/**
	 * Whether or not the system UI should be auto-hidden after
	 * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
	 */
	private static final boolean AUTO_HIDE = true;

	/**
	 * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
	 * user interaction before hiding the system UI.
	 */
	private static final int AUTO_HIDE_DELAY_MILLIS = 3000;

	/**
	 * If set, will toggle the system UI visibility upon interaction. Otherwise,
	 * will show the system UI visibility upon interaction.
	 */
	private static final boolean TOGGLE_ON_CLICK = true;

	/**
	 * The flags to pass to {@link SystemUiHider#getInstance}.
	 */
	private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION;

	/**
	 * The instance of the {@link SystemUiHider} for this activity.
	 */
	private SystemUiHider mSystemUiHider;
	private ViewPager contentView;
	private Button btnImageShare;
	private TextView tvImageDescription;
	private ImagePagerAdapter adapter;
	ArrayList<GalleryContent> imgData;
	
	@SuppressLint("NewApi") @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_photo);
		
		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) getActionBar().hide();
		
		final View controlsView = findViewById(R.id.fullscreen_content_controls);
		contentView = (ViewPager) findViewById(R.id.fullscreen_content);
		btnImageShare = (Button) findViewById(R.id.btnImageShare);
		final View description = findViewById(R.id.description);
		tvImageDescription = (TextView) findViewById(R.id.tvImageDescription);
		
		btnImageShare.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				final GalleryContent imgObj = imgData.get(contentView.getCurrentItem());
				Session session = Session.getActiveSession();
				if(session==null||session.isClosed()) Session.openActiveSession(getActivity(), true, new StatusCallback() {
					
					@Override
					public void call(Session session, SessionState state, Exception exception) {
						if(session != null){
							if(state.isOpened()){
								FbUtil.ShareToFb(getActivity(), imgObj.getDescription(), "", FbUtil.YN_LINK, imgObj.getResourceUrl());
							}
						}
					}
				}); else
					FbUtil.ShareToFb(getActivity(), imgObj.getDescription(), "", FbUtil.YN_LINK, imgObj.getResourceUrl());
			}
		});
		
		ArrayList<String> imgURLs = new ArrayList<String>();
		ArrayList<GalleryContent> data = getIntent().getParcelableArrayListExtra("data");
	    imgData = new ArrayList<GalleryContent>();
		for (GalleryContent c : data) {
			if (c.getType() == 1) {
				imgURLs.add(c.getResourceUrl());
				imgData.add(c);
			}
		}
		adapter = new ImagePagerAdapter(this, imgURLs);
	    
		contentView.setAdapter(adapter);
		
		contentView.setCurrentItem(getIntent().getIntExtra("pos", 0));
		tvImageDescription.setText(imgData.get(getIntent().getIntExtra("pos", 0)).getDescription());
		
		contentView.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
			@Override
			public void onPageSelected(int pos) {
				Log.d("des", imgData.get(pos).getDescription());
				tvImageDescription.setText(imgData.get(pos).getDescription());
				super.onPageSelected(pos);
			}
		});

		// Set up an instance of SystemUiHider to control the system UI for
		// this activity.
		mSystemUiHider = SystemUiHider.getInstance(this, contentView,
				HIDER_FLAGS);
		mSystemUiHider.setup();
		mSystemUiHider
				.setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() {
					// Cached values.
					int mControlsHeight;
					int mShortAnimTime;

					@Override
					@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
					public void onVisibilityChange(boolean visible) {
						if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
							// If the ViewPropertyAnimator API is available
							// (Honeycomb MR2 and later), use it to animate the
							// in-layout UI controls at the bottom of the
							// screen.
							if (mControlsHeight == 0) {
								mControlsHeight = controlsView.getHeight();
							}
							if (mShortAnimTime == 0) {
								mShortAnimTime = getResources().getInteger(
										android.R.integer.config_shortAnimTime);
							}
							controlsView
									.animate()
									.translationY(visible ? 0 : mControlsHeight)
									.setDuration(mShortAnimTime);
							btnImageShare.setVisibility(visible ? View.VISIBLE
									: View.GONE);
							description.setVisibility(visible ? View.VISIBLE
									: View.GONE);
							
						} else {
							// If the ViewPropertyAnimator APIs aren't
							// available, simply show or hide the in-layout UI
							// controls.
							controlsView.setVisibility(visible ? View.VISIBLE
									: View.GONE);
							btnImageShare.setVisibility(visible ? View.VISIBLE
									: View.GONE);
							description.setVisibility(visible ? View.VISIBLE
									: View.GONE);
							
						}

//						if (visible && AUTO_HIDE) {
//							// Schedule a hide().
//							Log.d("viewPager", "ok");
//							delayedHide(AUTO_HIDE_DELAY_MILLIS);
//						}
					}
				});

		// Set up the user interaction to manually show or hide the system UI.
		contentView.setOnTouchListener(new View.OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				if(event.getAction()==MotionEvent.ACTION_UP){		
					if (TOGGLE_ON_CLICK) {
						mSystemUiHider.toggle(0);
					} else {
						mSystemUiHider.show(0);
					}
				} else delayedHide(AUTO_HIDE_DELAY_MILLIS);
				return false;
			}
		});
		// Upon interacting with UI controls, delay any scheduled hide()
		// operations to prevent the jarring behavior of controls going away
		// while interacting with the UI.
//		findViewById(R.id.dummy_button).setOnTouchListener(
//				mDelayHideTouchListener);
//		controlsView.setOnTouchListener(mDelayHideTouchListener);
//		description.setOnTouchListener(mDelayHideTouchListener);
//		btnLike.setOnClickListener(new OnClickListener() {
//			
//			@Override
//			public void onClick(View v) {
//				Toast.makeText(getApplicationContext(), "fuck you!", Toast.LENGTH_SHORT).show();
//			}
//		});
	}

	@Override
	protected void onPostCreate(Bundle savedInstanceState) {
		super.onPostCreate(savedInstanceState);

		// Trigger the initial hide() shortly after the activity has been
		// created, to briefly hint to the user that UI controls
		// are available.
		delayedHide(100);
	}

	/**
	 * Touch listener to use for in-layout UI controls to delay hiding the
	 * system UI. This is to prevent the jarring behavior of controls going away
	 * while interacting with activity UI.
	 */
	View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {
		@Override
		public boolean onTouch(View view, MotionEvent motionEvent) {
//			if (AUTO_HIDE) {
//				delayedHide(AUTO_HIDE_DELAY_MILLIS);
//			}
			if (TOGGLE_ON_CLICK) {
				mSystemUiHider.toggle(0);
			} else {
				mSystemUiHider.show(0);
			}
			return false;
		}
	};

	Handler mHideHandler = new Handler();
	Runnable mHideRunnable = new Runnable() {
		@Override
		public void run() {
			mSystemUiHider.hide();
		}
	};

	/**
	 * Schedules a call to hide() in [delay] milliseconds, canceling any
	 * previously scheduled calls.
	 */
	private void delayedHide(int delayMillis) {
		mHideHandler.removeCallbacks(mHideRunnable);
		mHideHandler.postDelayed(mHideRunnable, delayMillis);
	}
	
	private Activity getActivity(){
		return this;
	}
}
